package tech.aistar.day13;

import java.io.*;

/**
 * 本类用来演示: 带缓冲功能的输入流
 *
 * @author: success
 * @date: 2021/3/24 2:09 下午
 */
public class BufferedInputStreamDemo {
    public static void main(String[] args) {
        //构建缓冲流
        try(BufferedInputStream in = new BufferedInputStream(new FileInputStream("src/tech/aistar/day13/v.jpg"));
            BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream("src/tech/aistar/day13/v_copy.jpg"))){

            //性能极其高

            byte[] buf = new byte[3*1024];//自定义的内存缓冲数组
            //需要思考自定义的buf和BufferedInputStream的buf有什么区别
            //自定义的buf - 面向内存的

            //底层的buf - 面向机器的

            //当我们实例化一个带缓冲功能的字节输入流的时候,它会预先将磁盘上的数据预加载到内部的buf中.
            //然后调用in.read(buf),这个时候从预加载的buf中进行读取字节放入到自定义的数组中.
            //如果底层的buf中的数据被拿光了,会再次从磁盘中加载数据到底层的buf中

            while(true){
                int len  = in.read(buf);

                if(len == -1)
                    break;

                out.write(buf,0,len);
            }
            System.out.println("拷贝成功!");

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }


    }

}
